import java.util.Scanner;
import java.util.*;
public class test1 {
    /*小力将 N 个零件的报价存于数组 nums。小力预算为 target，
    假定小力仅购买两个零件，要求购买零件的花费不超过预算，请问他有多少种采购方案。
    注意：答案需要以 1e9 + 7 (1000000007) 为底取模，如：计算初始结果为：1000000008，请返回 1*/
    public static int seek(int[] nums,int target) {
        Arrays.sort(nums);
        int m=1000000007;
        int count=0;
        int l=0;
        int r=nums.length-1;
        while(l<r){
            //超过则右指针左移
            if(nums[l]+nums[r]>target){
                r--;
            }
            //符合条件则累计即可，该范围内的数相加都符合条件，同时做指针右移
            else{
                count+=r-l;
                l++;
            }
            //避免溢出
            count%=m;
        }
        return count%m;
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] nums=new int[n];
        for(int i=0;i<n;i++){
            nums[i]=sc.nextInt();
        }
        int target=sc.nextInt();
        int result=seek(nums,target);
        System.out.println(result);
    }
}
